/**
 * 产品服务接口 - 金融服务产品的管理和服务接口
 *
 * 开发人员：马勇俐
 * 开发时间：2025-11-16 至 2025-11-20
 * 模块职责：定义金融服务产品的完整管理接口，支持产品创建、查询、更新、搜索等功能
 *
 * 技术要点：
 * - 多租户产品数据隔离和管理
 * - 产品状态和分类管理机制
 * - 产品搜索和过滤功能实现
 * - 软删除机制和数据安全性
 * - 产品排序和展示逻辑处理
 *
 * 开发故事：负责产品服务接口的设计和定义，与产品控制器和前端产品页面深度配合，为企业提供便捷的金融产品管理服务。
 */
package com.pbl.service;

import com.pbl.entity.Product;

import java.util.List;

public interface ProductService {

    /**
     * 获取企业所有产品列表
     * @param enterpriseId 企业ID
     * @return 产品列表
     */
    List<Product> getProductsByEnterprise(Long enterpriseId);

    /**
     * 获取企业活跃产品列表
     * @param enterpriseId 企业ID
     * @return 活跃产品列表
     */
    List<Product> getActiveProductsByEnterprise(Long enterpriseId);

    /**
     * 根据产品ID获取产品详情
     * @param id 产品ID
     * @return 产品对象
     */
    Product getProductById(Long id);

    /**
     * 根据企业ID和产品代码获取产品
     * @param enterpriseId 企业ID
     * @param code 产品代码
     * @return 产品对象
     */
    Product getProductByCode(Long enterpriseId, String code);

    /**
     * 创建新的金融服务产品
     * @param enterpriseId 企业ID
     * @param code 产品代码
     * @param name 产品名称
     * @param description 产品描述
     * @param category 产品分类
     * @param price 产品价格
     * @param currency 货币类型
     * @return 创建的产品对象
     */
    Product createProduct(Long enterpriseId, String code, String name, String description,
                         String category, java.math.BigDecimal price, String currency);

    /**
     * 更新产品信息
     * @param id 产品ID
     * @param name 产品名称
     * @param description 产品描述
     * @param category 产品分类
     * @param price 产品价格
     * @param currency 货币类型
     * @param status 产品状态
     * @param sortOrder 排序序号
     * @return 更新后的产品对象
     */
    Product updateProduct(Long id, String name, String description, String category,
                         java.math.BigDecimal price, String currency, Product.ProductStatus status, Integer sortOrder);

    /**
     * 删除产品（软删除，更改状态为停用）
     * @param id 产品ID
     */
    void deleteProduct(Long id);

    /**
     * 根据关键词搜索企业产品
     * @param enterpriseId 企业ID
     * @param keyword 搜索关键词
     * @return 匹配的产品列表
     */
    List<Product> searchProducts(Long enterpriseId, String keyword);

    /**
     * 根据分类获取企业产品
     * @param enterpriseId 企业ID
     * @param category 产品分类
     * @return 指定分类的产品列表
     */
    List<Product> getProductsByCategory(Long enterpriseId, String category);
}
